JPA Repository Interface কি?
Spring Boot এর JPA Repository হলো একটি ইন্টারফেস যা Spring Data JPA প্রদান করে। এটি ডেটাবেসে সাধারণ CRUD (Create, Read, Update, Delete) অপারেশন সহজে সম্পন্ন করতে সাহায্য করে। JPA Repository স্বয়ংক্রিয়ভাবে প্রয়োজনীয় SQL কুয়েরি জেনারেট করে, ফলে ডেভেলপারদের কুয়েরি লেখার প্রয়োজন হয় না।
JPA Repository এর বৈশিষ্ট্য
- স্বয়ংক্রিয় SQL অপারেশন: CRUD অপারেশনের জন্য SQL কুয়েরি স্বয়ংক্রিয়ভাবে তৈরি হয়।
- কাস্টম কুয়েরি সাপোর্ট: প্রয়োজন হলে মেথডের নামের ভিত্তিতে কাস্টম কুয়েরি তৈরি করা যায়।
- পেজিনেশন এবং সোর্টিং সাপোর্ট: ডেটা পেজিনেট এবং সোর্ট করার জন্য বিল্ট-ইন মেথড প্রদান করে।
JPA Repository Interface তৈরি
Spring Boot এ JPA Repository তৈরি করতে JpaRepository ইন্টারফেসটি এক্সটেন্ড করতে হয়। উদাহরণস্বরূপ:
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {
// কাস্টম মেথড প্রয়োজনে এখানে ডিক্লেয়ার করুন।
}
এখানে:
Productহলো Entity ক্লাস যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে।Longহলো প্রাইমারি কি (Primary Key) এর ডেটা টাইপ।
JPA Repository এর সাধারণ CRUD অপারেশন
১. ডেটা সেভ করা (Save Data)
save() মেথড ব্যবহার করে নতুন ডেটা ডেটাবেসে যুক্ত করা যায়:
Product product = new Product();
product.setName("Laptop");
product.setPrice(80000.0);
productRepository.save(product);
২. ডেটা রিড করা (Read Data)
findById() মেথড ব্যবহার করে নির্দিষ্ট একটি রেকর্ড রিড করা যায়:
Optional<Product> product = productRepository.findById(1L);
product.ifPresent(System.out::println);
findAll() মেথড ব্যবহার করে সমস্ত ডেটা রিড করা যায়:
List<Product> products = productRepository.findAll();
products.forEach(System.out::println);
৩. ডেটা আপডেট করা (Update Data)
save() মেথড ব্যবহার করে বিদ্যমান রেকর্ড আপডেট করা যায়:
Product existingProduct = productRepository.findById(1L).orElse(null);
if (existingProduct != null) {
existingProduct.setPrice(85000.0);
productRepository.save(existingProduct);
}
৪. ডেটা ডিলিট করা (Delete Data)
deleteById() মেথড ব্যবহার করে নির্দিষ্ট রেকর্ড ডিলিট করা যায়:
productRepository.deleteById(1L);
deleteAll() মেথড ব্যবহার করে সমস্ত ডেটা ডিলিট করা যায়:
productRepository.deleteAll();
কাস্টম কুয়েরি তৈরি
JPA Repository এর মাধ্যমে মেথডের নামের ভিত্তিতে কাস্টম কুয়েরি তৈরি করা যায়। উদাহরণস্বরূপ:
১. নির্দিষ্ট নামের ভিত্তিতে রেকর্ড রিড করা
List<Product> findByName(String name);
ব্যবহার:
List<Product> products = productRepository.findByName("Laptop");
২. প্রাইসের সীমার মধ্যে রেকর্ড খুঁজে আনা
List<Product> findByPriceBetween(Double minPrice, Double maxPrice);
ব্যবহার:
List<Product> products = productRepository.findByPriceBetween(50000.0, 100000.0);
পেজিনেশন এবং সোর্টিং
JPA Repository পেজিনেশন এবং সোর্টিং সাপোর্ট করে।
পেজিনেশন উদাহরণ
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
Page<Product> page = productRepository.findAll(PageRequest.of(0, 5)); // প্রথম পেজ, প্রতি পেজে ৫টি রেকর্ড
page.getContent().forEach(System.out::println);
সোর্টিং উদাহরণ
import org.springframework.data.domain.Sort;
List<Product> products = productRepository.findAll(Sort.by(Sort.Direction.ASC, "price"));
products.forEach(System.out::println);
JPA Repository ব্যবহারের সুবিধা
- ডেটাবেস অপারেশন সহজে সম্পন্ন করা যায়।
- ম্যানুয়াল SQL কোড লেখার প্রয়োজন নেই।
- পেজিনেশন এবং সোর্টিংয়ের জন্য বিল্ট-ইন সাপোর্ট।
- ডেটা অ্যাক্সেস লেয়ার মডুলার এবং রিইউজেবল হয়।
JPA Repository এর সীমাবদ্ধতা
- জটিল কুয়েরির জন্য হাইব্রিড সমাধান দরকার হতে পারে (e.g., Native Query বা Criteria API)।
- বড় ডেটাসেটের ক্ষেত্রে কার্যকারিতা (Performance) হ্রাস পেতে পারে।
Read more